package advanced.sorm;

import java.util.List;

/**
 * 负责查询, 对外提供的核心类
 */
public interface Query {

    /**
     * 执行sql语句, 返回影响记录
     *
     * @param sql
     * @param params
     * @return
     */
    int executeDML(String sql, Object[] params);

    /**
     * 将一个对象存入数据库种
     *
     * @param o
     */
    void insert(Object o);

    /**
     * 删除表中对应的该对象记录
     *
     * @param o
     */
    void delete(Object o);

    /**
     * 删除和类对应的表中的指定记录
     *
     * @param clz
     * @param id  要删除的记录的id
     * @return
     */
    int delete(Class clz, Object id);

    /**
     * 更新对象对应记录的字段的值,
     * 更新指定字段
     *
     * @param obj
     * @param filedNames
     * @return
     */
    int update(Object obj, String[] filedNames);

    /**
     * 根据sql 查询多行记录, 并封装为指定的类型对象
     *
     * @param sql
     * @param clz
     * @param params 查询的参数
     * @return
     */
    List queryRows(String sql, Class clz, Object[] params);

    /**
     * 根据sql 查询一个记录
     *
     * @param sql
     * @param clz
     * @param params
     * @return
     */
    Object queryUniqueRow(String sql, Class clz, Object[] params);

    /**
     * 查询一个值
     *
     * @param sql
     * @param params
     * @return
     */
    Object queryValue(String sql, Object[] params);

    /**
     * 查询返回一个数字
     *
     * @param sql
     * @param params
     * @return
     */
    Number queryNumber(String sql, Object[] params);

}
